SQL Serverのエラーログを抽出する
環境
想定するシチュエーション
code:sql
exec sp_readerrorlog 0, 1
table:result
LogDate ProcessInfo Text
2023-08-21 22:12:29.000 Logon エラー: x、重大度: y、状態: z。
2023-08-21 22:12:29.000 Logon Login failed ...
以下略
sp_readerrorlogの引数でメッセージにフィルタをかけることができる
なので、エラーをひっかけるときはN'エラー'のように書くのだが、これだとエラー番号しかひっかからない
そうじゃなくてエラー番号と内容両方ほしい
こんな感じ「エラー: x、重大度: y、状態: z / Login failed ...」
フィルタで実現する方法が思いつかない
実現方法
LogDateとProcessInfoでgroup byしてgroupになったTextを合体とかできないかな…
code:sql
LogDate DATETIME
, ProcessInfo NVARCHAR(255)
, Text NVARCHAR(MAX)
);
INSERT
, 1;
SELECT
LogDate
, ProcessInfo
, STRING_AGG(Text, ' / ') AS CombinedText
FROM
WHERE
LogDate BETWEEN CAST(
CONVERT(date, DATEADD(DAY, - 1, SYSDATETIME())) AS datetime
) AND DATEADD(
millisecond
, - 3
, CAST(CONVERT(date, SYSDATETIME()) AS datetime)
)
GROUP BY
LogDate
, ProcessInfo
HAVING
STRING_AGG(Text, ' / ') like 'エラー%'
ORDER BY
LogDate DESC;
参考